package com.chaos.payment.controller;

import cn.hutool.core.lang.Assert;
import com.chaos.framework.model.dto.result.data.DataResult;
import com.chaos.framework.model.enums.ResultEnum;
import com.chaos.framework.model.serivce.RedisLockedFunction;
import com.chaos.framework.model.serivce.RedissonDistributedLock;

import com.chaos.payment.service.bsns.OrderPayBsns;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

/**
 * @description:
 * @author: crayon
 * @time: 2024/6/18 19:43
 */


@Component
@RequiredArgsConstructor
public class UnifiedOrderWrapper {

    private final RedissonDistributedLock redisDistributedLock;

//    private final UnifiedOrderBsns unifiedOrderBsns;
//
//    private final OrderPayBsns orderPayBsns;
//
//    public DataResult<UnifiedXsnOrderDto> createOrder(UnifiedXsnOrderDto data) {
//        Assert.notNull(data.getUserId(), "用户id不能为空");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_CREATE_LOCK, data.getUserId());
//        return RedisLockedFunction.<UnifiedXsnOrderDto, DataResult<UnifiedXsnOrderDto>>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(unifiedOrderBsns::createOrder)
//                .build()
//                .apply(data, DataResult.error(ResultEnum.LIMIT_EXCEEDED));
//    }
//
//    public DataResult<PayResponse> pay(OrderPayDto data) {
//        Assert.notNull(data.getOrderNo(), "订单编号不能为空");
//        Assert.notNull(data.getOrderType(), "订单类型不能为空");
//        Assert.notNull(data.getPayType(), "支付方式不能为空");
//        Assert.notNull(data.getChannel(), "支付渠道不能为空");
//        Assert.notNull(data.getPayTradeType(), "支付场景不能为空");
//        Assert.notNull(data.getUserId(), "用户id不能为空");
//        Assert.notNull(data.getPayAmount(), "支付金额");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_PAY_LOCK, data.getOrderNo());
//        return RedisLockedFunction.<OrderPayDto, DataResult<PayResponse>>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(orderPayBsns::pay)
//                .build()
//                .apply(data, DataResult.error(ResultEnum.LIMIT_EXCEEDED));
//    }
//
//    public Boolean closeOrder(UnifiedXsnOrderDto data) {
//        Assert.notNull(data.getId(), "订单id不能为空");
//        Assert.notNull(data.getOrderType(), "订单类型不能为空");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_CLOSE_LOCK, data.getId());
//        return RedisLockedFunction.<UnifiedXsnOrderDto, Boolean>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(orderPayBsns::closeOrder)
//                .build()
//                .apply(data, Boolean.FALSE);
//    }
//
//    public DataResult<PayResponse> payQuery(OrderPayDto data) {
//        Assert.notNull(data.getOrderType(), "订单类型不能为空");
//        Assert.notNull(data.getPayType(), "支付方式不能为空");
//        Assert.notBlank(data.getThirdOrderNo(), "三方订单号不能为空");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_PAY_QUERY_LOCK, data.getId());
//
//        return RedisLockedFunction.<OrderPayDto, DataResult<PayResponse>>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(orderPayBsns::payQuery)
//                .build()
//                .apply(data, null);
//    }
//
//    public DataResult<RefundResponse> refund(OrderPayDto data) {
//        Assert.notNull(data.getOrderType(), "订单类型不能为空");
//        Assert.notNull(data.getPayType(), "支付方式不能为空");
//        Assert.notBlank(data.getOrderNo(), "订单号不能为空");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_REFUND_LOCK, data.getOrderNo());
//        return RedisLockedFunction.<OrderPayDto, DataResult<RefundResponse>>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(orderPayBsns::refund)
//                .build()
//                .apply(data, null);
//
//    }
//
//    public DataResult<RefundResponse> refundQuery(OrderPayDto data) {
//        Assert.notNull(data.getOrderType(), "订单类型不能为空");
//        Assert.notNull(data.getPayType(), "支付方式不能为空");
//        Assert.notBlank(data.getOrderNo(), "订单号不能为空");
//
//        String key = String.format(RedisLockKeyConstants.ORDER_REFUND_QUERY_LOCK, data.getOrderNo());
//        return RedisLockedFunction.<OrderPayDto, DataResult<RefundResponse>>builder()
//                .redisBean(redisDistributedLock)
//                .redisKey(key)
//                .lockSeconds(10)
//                .showInfoLog(false)
//                .function(orderPayBsns::refundQuery)
//                .build()
//                .apply(data, null);
//    }
}
